<?php
/**
 * Created by PhpStorm.
 * User: edmmss
 * Date: 2018/11/12
 * Time: 14:35
 */

namespace app\modules\multiton;


/**
 * Class Multiton
 * @package app\modules\multiton
 */
class Multiton
{
    const INSTANCE_MYSQL = 'mysql';
    const INSTANCE_ORACLE = 'oracle';

    /**
     * @var array
     */
    private static $_instance = [];

    /**
     * 通过懒加载获得实例（在第一次使用的时候创建)
     *
     * @date   2018/11/12
     * @author edmmss
     * @param string $instanceName
     * @return Multiton
     */
    public static function getInstance(string $instanceName): Multiton
    {
        if (!isset(static::$_instance[$instanceName])) {
            static::$_instance[$instanceName] = new static();
        }

        return static::$_instance[$instanceName];
    }

    /**
     * 不允许从外部调用以防止创建多个实例
     * 要使用单例，必须通过 Singleton::getInstance() 方法获取实例
     *
     * Multiton constructor.
     */
    private function __construct()
    {

    }

    /**
     * 防止实例被克隆（这会创建实例的副本）
     *
     * @date   2018/11/12
     * @author edmmss
     */
    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    /**
     * 防止反序列化（这将创建它的副本）
     *
     * @date   2018/11/12
     * @author edmmss
     */
    private function __wakeup()
    {
        // TODO: Implement __wakeup() method.
    }
}